package lambda;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.List;

/**
 * JDK之后, 集合提供了一个方法:forEach,
 */
public class LambdaDemo2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        System.out.println(list);

        //新循环遍历(新循环就是迭代器)
        for(String s : list){
            System.out.println(s);
        }
        //Consumer:消费者
        //forEach内部集合会顺序将每个元素调用accept方法传入
//        list.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });

//        list.forEach((s)->System.out.println(s));
        //如果方法只有一个参数，那么方法的()可以忽略不写
        list.forEach(s -> System.out.println(s));

        /*
            lambda表达式的特殊写法:方法引用
            格式:
            类名::方法名  对应静态方法
            对象::方法名  对应成员方法

            何时可以使用方法引用:
            当lambda表达式的参数列表与其调用的方法的参数列表一致时，就可以使用方法引用

            例如:
            list.forEach((s)->System.out.println(s));
                          ^                      ^
                   lambda的参数列表  一致   调用的方法的参数列表
                   此时可以省略掉参数部分，使用::调用引用

            list.forEach(System.out::println);
         */
        list.forEach(System.out::println);


    }
}
